/**
 * 设备ID管理器
 * 用于生成和管理设备唯一标识
 */
export default class DeviceIdManager {
  // 本地存储的设备ID键名
  private static readonly DEVICE_ID_KEY = 'device_unique_id';
  
  /**
   * 获取设备唯一ID
   * 如果本地存储中已有，则返回存储的ID
   * 否则生成新ID并保存
   * @returns 设备唯一ID
   */

  public static getDeviceId(): string {
    let cachedId = localStorage.getItem(this.DEVICE_ID_KEY);
    if (cachedId) return cachedId;

    let deviceId = jsb.reflection.callStaticMethod(
      "com/cocos/game/utils/DeviceUtils", // 替换为你的包名路径
      "getAndroidId",
      "()Ljava/lang/String;"
    );

    if (!deviceId || deviceId === "unknown_android_id") {
      deviceId = this.generateFallbackId();
    }

    localStorage.setItem(this.DEVICE_ID_KEY, deviceId);
    return deviceId;
  }
  
  /**
   * 生成设备唯一ID
   * 使用时间戳+随机数的组合
   * @returns 生成的设备ID
   */
  private static generateFallbackId(): string {
    const timestamp = Date.now().toString();
    const randomPart = Math.random().toString(36).substring(2, 15);
    return `${timestamp}_${randomPart}`;
  }

  /** 检测是否为模拟器，Android 平台下调用 Java 方法 */
  public static isEmulator(): any {
    if (cc.sys.os !== cc.sys.OS.ANDROID || typeof jsb === 'undefined') {
      return JSON.stringify({isEmulator: false}); // iOS/Web 忽略
    }

    try {
      const result = jsb.reflection.callStaticMethod(
        "com/cocos/game/utils/DeviceUtils",
        "isEmulator",
        "()Ljava/lang/String;"
      );
      return result;
    } catch (e) {
      console.warn("模拟器检测调用失败：", e);
      return false;
    }
  }
}
